home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / arexx / gtlclndx.lha / GetLocalIndex.rx < prev   
Text File  |  1996-04-01  |  9KB  |  248 lines

  1. /*
  2. ** $VER: GetLocalIndex.rx 0.3 (1.4.96)
  3. **
  4. ** ARexx script to create aminet style index files
  5. **
  6. ** To use this script, change the following 4 variables to your
  7. ** own settings: MainDir, HostAddress, LocalFile, RecentFile.
  8. **
  9. ** This script requires rexxsupport.library to run.
  10. **
  11. ** Written by Edwin H. Bielawski (ehb@draco.prima.ruhr.de)
  12. **
  13. ** Status: FREEWARE
  14. **
  15. */
  16.  
  17. MainDir =     'FTPC:aminet'                             /* your aminet directory */
  18. HostAddress = 'draco.prima.ruhr.de [193.141.111.197]'   /* Host name and IP address */
  19. LocalFile =   'LOCAL'                                   /* Name (file part) of the index file to create */
  20. RecentFile =  'RECENT'                                  /* Name (file part) of the recent file to create */
  21.  
  22. If ~Show('L',"rexxsupport.library") Then AddLib("rexxsupport.library",0,-30,0)
  23.  
  24. Directory = MainDir
  25. Say 'Create '||LocalFile||' for '||Directory
  26. Files = ShowDir(Directory, 'D', ';')
  27. If Open(WriteHandle,'T:LOCAL.0','WRITE') Then Do
  28.   WriteLn(WriteHandle,'')
  29.   CurrentFile = ''
  30.   Do Until (CurrentFile = '')
  31.     Parse VAR Files CurrentFile';'Files
  32.     If CurrentFile ~= '' Then Do
  33.       CALL GetLocalSub(Directory, CurrentFile, LocalFile)
  34.       Line = Directory||'/'||CurrentFile||'/'||LocalFile
  35.       WriteLn(WriteHandle,Line)
  36.     End
  37.   End
  38.   Close(WriteHandle)
  39.   Address COMMAND "Sort T:LOCAL.0 TO T:LOCAL.1"
  40.   Destination = Directory||'/'||LocalFile
  41.   If Open(WriteHandle,Destination,'WRITE') Then Do
  42.     WriteLn(WriteHandle,'| Local Aminet index on '||Date('N'))
  43.     WriteLn(WriteHandle,'| The list is sorted by directory and file name')
  44.     WriteLn(WriteHandle,'| This site is '||HostAddress||'.')
  45.     WriteLn(WriteHandle,'| Age measured in weeks before creation of this index.')
  46.     WriteLn(WriteHandle,'|')
  47.     WriteLn(WriteHandle,'|File              Dir        Size Age Description')
  48.     WriteLn(WriteHandle,'|----------------- ---        ---- --- -----------')
  49.     If Open(ReadHandle,'T:LOCAL.1','READ') Then Do
  50.       Do While ~eof(ReadHandle)
  51.         CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  52.         If CurrentLine ~= '' Then Do
  53.           If Open(TempReadHandle,CurrentLine,'READ') Then Do
  54.             Line = ReadLn(TempReadHandle)
  55.             Line = ReadLn(TempReadHandle)
  56.             Do While ~eof(TempReadHandle)
  57.               Line = ReadLn(TempReadHandle)
  58.               If Line ~= '' Then WriteLn(WriteHandle,Line)
  59.             End
  60.             Close(TempReadHandle)
  61.           End
  62.         End
  63.       End
  64.     End
  65.     Close(WriteHandle)
  66.     Close(ReadHandle)
  67.   End
  68. End
  69.  
  70. If Open(WriteHandle,MainDir||'/'||RecentFile,'WRITE') Then Do
  71.   WriteLn(WriteHandle,'| Recent uploads to '||HostAddress||' on '||Date('N'))
  72.   WriteLn(WriteHandle,'|')
  73.   WriteLn(WriteHandle,'|File              Dir        Size Description')
  74.   WriteLn(WriteHandle,'|----------------- ---        ---- -----------')
  75.   If Open(ReadHandle,MainDir||'/'||LocalFile,'READ') Then Do
  76.     Do While ~eof(ReadHandle)
  77.       Line = ReadLn(ReadHandle)
  78.       If Left(Line,1) ~= '|' Then Do
  79.         If SubStr(Line,36,3) = '  0' Then Do
  80.           NewLine = SubStr(Line,1,35)||SubStr(Line,40)
  81.           WriteLn(WriteHandle,NewLine)
  82.         End
  83.       End
  84.     End
  85.     Close(ReadHandle)
  86.   End
  87.   Close(WriteHandle)
  88. End
  89.  
  90. ADDRESS COMMAND "Delete >NIL: T:LOCAL.?"
  91.  
  92. Exit
  93.  
  94. /* ------------------------------------------------- */
  95.  
  96. GetLocalSub: Procedure
  97. Parse ARG StartDir,SubDir,LocalFile
  98. If SubDir ~= '' Then Do
  99.   Directory = StartDir||'/'||SubDir
  100.   Say 'Create '||LocalFile||' for '||Directory
  101.   Files = ShowDir(Directory, 'D', ';')
  102.   If Open(WriteHandle1,'T:LOCAL.2','WRITE') Then Do
  103.     WriteLn(WriteHandle1,'')
  104.     CurrentFile = ''
  105.     Do Until (CurrentFile = '')
  106.       Parse VAR Files CurrentFile';'Files
  107.       If CurrentFile ~= '' Then Do
  108.         CALL GetLocalSubSub(StartDir, SubDir||'/'||CurrentFile, LocalFile)
  109.         Line = Directory||'/'||CurrentFile||'/'||LocalFile
  110.         WriteLn(WriteHandle1,Line)
  111.       End
  112.     End
  113.     Close(WriteHandle1)
  114.     Address COMMAND "Sort T:LOCAL.2 TO T:LOCAL.3"
  115.     Destination = Directory||'/'||LocalFile
  116.     If Open(WriteHandle1,Destination,'WRITE') Then Do
  117.       Message = '| Contents of the directory '||SubDir
  118.       If exists(Directory||'/.message') Then Do
  119.         If Open(ReadHandle,Directory||'/.message','READ') Then Do
  120.           Message = ReadLn(ReadHandle)
  121.           Close(ReadHandle)
  122.         End
  123.         Message = '| Contents of the directory '||Message
  124.         Message = Compress(Message,'0d'x)
  125.       End
  126.       WriteLn(WriteHandle1,Message)
  127.       WriteLn(WriteHandle1,'|------------------------------------------------')
  128.       If Open(ReadHandle,'T:LOCAL.3','READ') Then Do
  129.         Do While ~eof(ReadHandle)
  130.           CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  131.           If CurrentLine ~= '' Then Do
  132.             If Open(TempReadHandle,CurrentLine,'READ') Then Do
  133.               Line = ReadLn(TempReadHandle)
  134.               Line = ReadLn(TempReadHandle)
  135.               Do While ~eof(TempReadHandle)
  136.                 Line = ReadLn(TempReadHandle)
  137.                 If Line ~= '' Then WriteLn(WriteHandle1,Line)
  138.               End
  139.               Close(TempReadHandle)
  140.             End
  141.           End
  142.         End
  143.       End
  144.       Close(WriteHandle1)
  145.       Close(ReadHandle)
  146.     End
  147.   End
  148. End
  149. Return(0)
  150.  
  151. /* ------------------------------------------------- */
  152.  
  153. GetLocalSubSub: Procedure
  154. Parse ARG StartDir,SubDir,LocalFile
  155. If SubDir ~= '' Then Do
  156.   Directory = StartDir||'/'||SubDir
  157.   DOIT = 0
  158.  
  159.   If ~exists(Directory||'/'||LocalFile) Then DOIT = 1
  160.   Else Do
  161.     FileState = StateF(Directory||'/'||LocalFile)
  162.     Parse VAR FileState Dummy1 Size Dummy3 Dummy4 F_Tag F_Minuten Dummy5
  163.     If Size > 100 Then DOIT = 1
  164.     Else Do
  165.       DirState = StateF(Directory)
  166.       Parse VAR DirState Dummy1 Dummy2 Dummy3 Dummy4 D_Tag D_Minuten Dummy5
  167.       If F_Tag < D_Tag Then DOIT = 1
  168.       Else If F_Tag = D_Tag Then If F_Minuten < D_Minuten Then DOIT = 1
  169.     End
  170.   End
  171.  
  172.   If DOIT Then Do
  173.     Say 'Create '||LocalFile||' for '||Directory
  174.     Files = ShowDir(Directory, 'f', ';')
  175.     If Open(WriteHandle2,'T:LOCAL.4','WRITE') Then Do
  176.       WriteLn(WriteHandle2,'')
  177.       CurrentFile = ''
  178.       Do Until (CurrentFile = '')
  179.         Parse VAR Files CurrentFile';'Files
  180.         If CurrentFile ~= '' Then Do
  181.           UpperCurrentFile = Upper(CurrentFile)
  182.           If UpperCurrentFile ~= 'LOCAL' Then Do
  183.             If Left(UpperCurrentFile,5) ~= 'INDEX' Then Do
  184.               If Left(UpperCurrentFile,1) ~= '.' Then Do
  185.                 If Right(UpperCurrentFile,6) ~= 'README' Then Do
  186.                   CurrentLine = Left(CurrentFile,19)||Left(SubDir,10)
  187.                   FileState = StateF(Directory||'/'||CurrentFile)
  188.                   Parse VAR FileState Dummy1 FileSize Dummy2 Dummy3 F_Tag Dummy4
  189.                   If FileSize < 1000 Then CurrentLine = CurrentLine||Right(FileSize,5)
  190.                   Else Do
  191.                     FileSize = FileSize%1000
  192.                     If FileSize < 1000 Then CurrentLine = CurrentLine||Right(FileSize,4)||'K'
  193.                     Else Do
  194.                       FileSizeRest = Left(Right((FileSize//1000),3,'0'),1)
  195.                       FileSize = FileSize%1000
  196.                       CurrentLine = CurrentLine||Right(FileSize,2)||'.'||FileSizeRest||'M'
  197.                     End
  198.                   End
  199.                   CurrentLine = CurrentLine||Right((Date('I')-F_Tag+1)%7,4)
  200.                   CheckFile = CurrentFile
  201.                   ReadMeFile = Directory||'/'||CheckFile||'.readme'
  202.                   Do Until (CheckFile='' | exists(ReadMeFile))
  203.                     CheckFile = Left(CheckFile,Length(CheckFile)-1)
  204.                     ReadMeFile = Directory||'/'||CheckFile||'.readme'
  205.                   End
  206.                   If CheckFile ~='' Then Do
  207.                     If Open(ReadHandle,ReadMeFile,'READ') Then Do
  208.                       Message = ReadLn(ReadHandle)
  209.                       Parse VAR Message 'Short:' ReadMe
  210.                       CurrentLine = CurrentLine||' '||Strip(ReadMe)
  211.                       Close(ReadHandle)
  212.                     End
  213.                   End
  214.                   WriteLn(WriteHandle2,CurrentLine)
  215.                 End
  216.               End
  217.             End
  218.           End
  219.         End
  220.       End
  221.       Close(WriteHandle2)
  222.       Address COMMAND "Sort T:LOCAL.4 TO T:LOCAL.5"
  223.       If Open(WriteHandle2,Directory||'/'||LocalFile,'WRITE') Then Do
  224.         Message = '| Contents of the directory '||SubDir
  225.         If exists(Directory||'/.message') Then Do
  226.           If Open(ReadHandle,Directory||'/.message','READ') Then Do
  227.             Message = ReadLn(ReadHandle)
  228.             Close(ReadHandle)
  229.           End
  230.           Message = '| Contents of the directory '||Message
  231.           Message = Compress(Message,'0d'x)
  232.         End
  233.         WriteLn(WriteHandle2,Message)
  234.         WriteLn(WriteHandle2,'|------------------------------------------------')
  235.         If Open(ReadHandle,'T:LOCAL.5','READ') Then Do
  236.           Do While ~eof(ReadHandle)
  237.             CurrentLine = Compress(ReadLn(ReadHandle),'0d'x)
  238.             If CurrentLine ~= '' Then WriteLn(WriteHandle2,CurrentLine)
  239.           End
  240.         End
  241.         Close(ReadHandle)
  242.         Close(WriteHandle2)
  243.       End
  244.     End
  245.   End
  246. End
  247. return(0)
  248.